博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
freemarker实现分页 jsp实现分页 java内存分页
阅读量:5730 次
发布时间:2019-06-18

本文共 4231 字,大约阅读时间需要 14 分钟。

hot3.png

很多时候我们都会用到分页,模版渲染有的用的是jsp,velocity,freemarker。。。

今天搞了下分页的发现有点烧脑,哈。 首先后台进行分页的时候会直接在sql里面实现,这个都大同小异,这里来说下在内存中分页,先上代码:

java内存分页: 通过传入查询出来的总的list数据,页码页数来得到当页的list数据。

/** * 内存分页,从1开始 * @param list list * @param pageIndex 页码 * @param pageSize 页数 * @param  T * @return T */public static  List pagination(List list, int pageIndex, int pageSize){    final int totalSize = list.size();    pageIndex = pageIndex <= 1 ? 1 : pageIndex;    int startIndex = Math.max((pageIndex - 1) * pageSize, 0);    startIndex = Math.min(startIndex, totalSize);    int endIndex = startIndex + pageSize;    endIndex = Math.min(endIndex, totalSize);    return list.subList(startIndex, endIndex);}

####后台得到数据之后需要由前端渲染得到分页html代码,下面是分别使用freemarker和jsp的实现.

  1. 使用freemarker,可以定义分页宏方便的解决这个问题。
<#macro page pageUrl totalCount pageIndex pageSize>   <#-- 页码为小于1的,恶意翻页的情况直接退出 -->   <#if pageIndex<=0>      <#assign pageIndex=1>   
   <#-- 数量大于总数量,恶意翻页的情况直接退出 -->   <#if ((pageIndex*pageSize-totalCount)>pageSize)>      <#return>   
   <#-- 只有一页的数据就不显示分页了 -->   <#if (totalCount<=pageSize)>      <#return>   
   
      
      <#assign pageCount=(totalCount/pageSize)?ceiling>      <#if (pageIndex>1)>         
  • <<
  •       
          <#if (pageIndex>5)>         <#assign prevPages=pageIndex-9>         <#if prevPages lt 1>            <#assign prevPages=1>         
             <#assign start=pageIndex-4>         
  • ...
  •       <#else>         <#assign start=1>      
          <#-- 显示当前页附近的页-->      <#assign end=pageIndex+4>      <#if (end>pageCount)>         <#assign end=pageCount>      
          <#list start..end as index>         <#if pageIndex==index>            
    ${index?c}         <#elseif index!=0>            
  • ${index?c}
  •          
          
          <#--如果后面页数过多,显示"...":-->      <#if (end lt pageCount)>         <#assign endend=end+4>         <#if (endend>pageCount)>            <#assign endend=pageCount>         
             
  • ...
  •       
          <#-- 显示"下一页":-->      <#if (pageIndex lt pageCount)>         
  • >>
  •       
          
    1. 使用jsp,这里我是直接在java代码里实现的分页插件。
    /**     * 分页工具     * @param pageUrl     * @param pageIndex     * @param pageSize     * @param totalCount     * @return string     */    public static String page(String pageUrl,int pageIndex,int pageSize,long totalCount){        StringBuilder stringBuilder = new StringBuilder("");        if( pageIndex<=0 ){            pageIndex=1;        }        if( (pageIndex*pageSize-totalCount) >pageSize ){            return stringBuilder.toString();  // 恶意翻页        }        if( totalCount<=pageSize ){            return stringBuilder.toString();  //只有一页就不显示了        }        stringBuilder.append("
    "); return stringBuilder.toString(); }

    像这样就可以了,至于传入的url是什么鬼,比如"index.jsp?p="或者"index.jsp?type=XXX&t=XXX&p="

    这里我自己定义的页码参数是p,看自己心情喽。

    总之不管你使用何种方法,这几个参数是需要的:传入的需要拼接的url,页码pageIndex,一页显示多少数据pageSize,  总共多少totalCount.

    转载于:https://my.oschina.net/110NotFound/blog/752944

    你可能感兴趣的文章
    SQL SERVER 2012 只能识别20个CPU的问题
    查看>>
    【单调队列】【P1776】宝物筛选
    查看>>
    使用shell脚本生成数据库markdown文档
    查看>>
    centos和pycharm中取绝对路径的差别
    查看>>
    ext2磁盘布局
    查看>>
    MySql数据库2【常用命令行】
    查看>>
    动态规划---->货郎担问题
    查看>>
    添加虚拟子网
    查看>>
    Ubuntu 12.04 root用户登录设置
    查看>>
    存储过程点滴
    查看>>
    Maven编译跳过test的设置
    查看>>
    SQLyog图形化l数据库的操作和学习
    查看>>
    raspbian 怎么才能有声音?
    查看>>
    [LeetCode]22.Generate Parentheses
    查看>>
    《数据结构》—— 线性表(上)
    查看>>
    WEB前端 CSS选择器
    查看>>
    计算A/B Test需要的样本量
    查看>>
    二叉树前序中序后序遍历的非递归方法
    查看>>
    nginx+tomcat实现负载均衡
    查看>>
    mysql 行转列列转行
    查看>>